Postgresql 安全管理 HASH函数
1 背景知识
主要介绍常用的Hash函数。
2 digest
2.1 digest 语法定义
digest(data text, type text) returns bytea
digest(data bytea, type text) returns bytea
2.2 digest 示例语句
select md5('123');
202cb962ac59075b964b07152d234b70
select digest('123','md5');
\x202cb962ac59075b964b07152d234b70
select pg_typeof(md5('123'));
text
select pg_typeof(digest('123','md5'));
bytea
3 crypt
3.1 crypt 语法定义
1、crypt 将指定密码加密为某种密文。
2、crypt 函数需要指定衣一个 salt
。
3、salt 由 gen_salt
函数生成。
传入参数 | 说明 |
---|---|
password | 传入明文密码。 |
salt | 传入 salt |
1、gen_salt 可以为crypt()的使用生成一个新的随机salt字符串。
2、gen_salt 可以为crypt()指定加密算法。
3、iter_count 为密码重复加密的次数。
3、type 参数指定散列算法。接受的类型有以下几种:
算法 | 最大口令长度 | 自适应? | salt 位数 | 描述 |
---|---|---|---|---|
bf | 72 | yes | 128 | 基于Blowfish,2a的变体 |
md5 | unlimited | no | 48 | 基于MD5加密 |
xdes | 8 | yes | 24 | 扩展的DES |
des | 8 | no | 12 | 原始的UNIX 加密 |
crypt(password text, salt text) returns text
gen_salt(type text [, iter_count integer ]) returns text
3.2 crypt 函数示例
1、使用 gen_salt 函数生成加密一览。
select gen_salt('md5'); --$1开头
$1$2XW7Fu8z
select gen_salt('bf'); --$2a开头,后面记录了循环次数
$2a$06$fNQCsIQ/FNlXXhT00xj71u
select gen_salt('des'); --2位字符串
uG
select gen_salt('xdes'); --下划线开头,点点前面的字符串跟循环次数有关
_J9..clye
2、使用 crypt 函数加密口令。
select crypt('1234','_J9..clye');
_J9..clye5LJgMRldROE
select crypt('1234',gen_salt('bf',15));
$2a$15$jjYhJPqzU3pe5BnzsHj.W.k1QQZH1g3ulyzQStLFrcP4D6/u..PL.